package framework;

/**
 * This is the interface for the automaton plugin. The user has the choice to
 * implement this as they prefer. They can choose whichever kind of automaton
 * they wish to implement using this plugin.
 * 
 * @author jtumarki, ntibrewa, shuaihan, wesleyk
 * 
 */
public interface AutomatonPlugin {
	/**
	 * This method returns a collection of all the unique states in the current
	 * automaton.
	 * 
	 * @return a collection of all unique states
	 */
	public State[] getAllStates();

	/**
	 * This method gets the state calculator the user. can use in their
	 * automaton to find the next set of states. Please see StateCalculator
	 * documentation for more detailed info
	 * 
	 * @return the statecalculator object needed
	 */
	public StateCalculator getStateCalculator();

	/**
	 * This function returns the initial board in the beginnning of the
	 * simulation.
	 * 
	 * @return board at the beginning of the simulation
	 */
	public Board initialBoard();

}
